import { RootThunkAction } from "@/types/store"
import { http } from "@/utils/http"
import type {
  UserResponse,
  UserProfileResponse,
  UserProfile,
} from "@/types/data"
// 做异步请求

// redux 异步action
export const getUser = (): RootThunkAction => {
  return async (dispatch) => {
    // 实现数据的请求 得到的数据再进行分发
    const res = (await http.get("/user")) as UserResponse // 得到的是返回的结构
    // 直接dispatch
    // dispatch({ })
    dispatch({ type: "user/getuser", payload: res.data }) // 分发action
  }
}

// 获取用户的资料
export const getUserProfile = (): RootThunkAction => {
  return async (dispatch) => {
    const res = (await http.get("/user/profile")) as UserProfileResponse
    // redux新版本的提示 thunk中 没有对应的提示 会校验
    dispatch({ type: "user/getprofile", payload: res.data })
  }
}

export const updateUserProfile = (
  userProfile: Partial<UserProfile>
): RootThunkAction => {
  return async (dispatch) => {
    // 需要调用接口 需要参数的
    // 此时认为传入的是一个对象 { name, birsday, gender, intro  }
    await http.patch("/user/profile", userProfile)
    // 需要在这个位置 更新资料完成之后 还需要做一些其他的操作
    // 此时可以保证接口已经调用成功-后台数据已经发生了变化-重新拉取??? --- 直接同步数据
    dispatch({ type: "user/update", payload: userProfile })
  }
}
